package com.nlelpct.manage.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nlelpct.manage.mapper.SysVersionUpdateInfoMapper;
import com.nlelpct.manage.model.dto.PageGeneralDto;
import com.nlelpct.manage.model.entity.SysVersionUpdateDetail;
import com.nlelpct.manage.model.entity.SysVersionUpdateInfo;
import com.nlelpct.manage.model.vo.RespSysVersionInfoDetailVo;
import com.nlelpct.manage.model.vo.ResponseResult;
import com.nlelpct.manage.service.ISysVersionUpdateDetailService;
import com.nlelpct.manage.service.ISysVersionUpdateInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author nlelpct
 * @since 2020-04-08
 */
@Service
@Slf4j
public class SysVersionUpdateInfoServiceImpl extends ServiceImpl<SysVersionUpdateInfoMapper, SysVersionUpdateInfo> implements ISysVersionUpdateInfoService {

    @Autowired
    private ISysVersionUpdateDetailService iSysVersionUpdateDetailService;

    @Override
    public ResponseResult<Map<String, Object>> queryVersionUpdateInfoByPage(PageGeneralDto pageGeneralDto, String systemId) {
        List<RespSysVersionInfoDetailVo> respVersionInfoDetailVos = new ArrayList<>();
        Page<SysVersionUpdateInfo> page = new Page<>(pageGeneralDto.getPageNum(), pageGeneralDto.getPageSize());
        QueryWrapper<SysVersionUpdateInfo> query = new QueryWrapper<>();
        query.eq(SysVersionUpdateInfo.SYSTEM_ID, systemId);
        query.orderByDesc(SysVersionUpdateInfo.CREATE_TIME);
        IPage<SysVersionUpdateInfo> iPage = this.page(page, query);
        List<SysVersionUpdateInfo> versionUpdateInfoList = iPage.getRecords();

        HashMap<String, List<SysVersionUpdateDetail>> sysVersionUpdateInfoDetailMap = new HashMap<>();

        if (versionUpdateInfoList != null && versionUpdateInfoList.size() > 0) {
            List<String> versionIds = new ArrayList<>();

            for (SysVersionUpdateInfo sysVersionUpdateInfoItem: versionUpdateInfoList) {
                versionIds.add(sysVersionUpdateInfoItem.getId());
            }
            sysVersionUpdateInfoDetailMap = iSysVersionUpdateDetailService.getSysVersionUpdateDetailList(versionIds);

            for (SysVersionUpdateInfo versionUpdateInfoItem: versionUpdateInfoList) {
                RespSysVersionInfoDetailVo respVersionInfoDetailVo = new RespSysVersionInfoDetailVo();
                if (sysVersionUpdateInfoDetailMap.get(versionUpdateInfoItem.getId()) != null) {
                    respVersionInfoDetailVo.setId(versionUpdateInfoItem.getId());
                    respVersionInfoDetailVo.setSystemId(versionUpdateInfoItem.getSystemId());
                    respVersionInfoDetailVo.setCreateTime(versionUpdateInfoItem.getCreateTime());
                    respVersionInfoDetailVo.setVersionName(versionUpdateInfoItem.getVersionName());
                    respVersionInfoDetailVo.setMsgList(sysVersionUpdateInfoDetailMap.get(versionUpdateInfoItem.getId()));
                }

                respVersionInfoDetailVos.add(respVersionInfoDetailVo);
            }
        }
        Map<String, Object> data = new HashMap<String, Object>();

        data.put("datalist", respVersionInfoDetailVos);
        data.put("total", iPage.getTotal());
        return ResponseResult.success(data);
    }


}
